//
//  common.c
//  linear_algebra
//
//  Created by zhangnan on 2025/3/21.
//

#include "common.h"

// 交换两个整数的值
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int permute_index=0;

// 生成排列
void permute(int arr[], int start, int end,int *result) {
    if (start == end) {
        for (int i = 0; i <= end; i++) {
            result[permute_index]=arr[i];
            permute_index++;
        }
    } else {
        for (int i = start; i <= end; i++) {
            swap(&arr[start], &arr[i]);
            permute(arr, start + 1, end,result);
            swap(&arr[start], &arr[i]);
        }
    }
}


// 定义计算阶乘的函数
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}


// 求最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 比较函数，用于 qsort
int compare(const void *a, const void *b) {
    ValueIndex *va = (ValueIndex *)a;
    ValueIndex *vb = (ValueIndex *)b;
    return va->value - vb->value;
}
